package com.zh.service;


import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.zh.domain.dto.task.AddTaskRequest;
import com.zh.domain.dto.task.PageTaskDynamicRequest;
import com.zh.domain.dto.task.PageTaskRequest;
import com.zh.domain.dto.task.UpdateTaskRequest;
import com.zh.domain.entity.Task;
import com.zh.domain.entity.TaskDynamics;
import com.zh.domain.vo.task.TaskDynamicVo;
import com.zh.domain.vo.task.TaskVo;

import java.util.List;

/**
 * @author Administrator
 * @description 针对表【tasks(任务表)】的数据库操作Service
 * @createDate 2025-02-09 16:24:10
 */
public interface TaskService extends IService<Task> {

    Boolean addTask(AddTaskRequest addTaskRequest);

    void sendMessageAndDynamicWhenAdd(Integer operatorId, Task newTask);

    Boolean updateTask(UpdateTaskRequest updateTaskRequest);

    Boolean updateTask(Integer userId, UpdateTaskRequest updateTaskRequest);

    void sendMessageAndDynamicWhenUpdate(Integer operatorId, Task oldTask, Task newTask);

    Page<TaskVo> pageTasks(PageTaskRequest pageTaskRequest);

    List<TaskVo> listByReqId(Integer reqId);

    /**
     * 迭代的直接任务
     *
     * @param iterId
     * @return
     */
    List<TaskVo> listByIterationIdDirectly(Integer iterId);

    /**
     * 迭代下的所有任务
     *
     * @param iterId
     * @return
     */
    List<TaskVo> listByIterationId(Integer iterId);

    List<TaskVo> listByMileStoneIdDirectly(Integer mileId);

    List<TaskVo> listByMileStoneId(Integer mileId);

    List<TaskVo> listByProIdDirectly(Integer proId);

    TaskVo getDetail(Integer id);

    Page<TaskDynamicVo> pageDynamics(PageTaskDynamicRequest pageTaskDynamicRequest);


    List<TaskVo> listByProId(Integer proId);

    List<TaskVo> listByProIdAndOwnerId(Integer proId);
    boolean deleteTask(Integer taskId);

    void sendMessageAndDynamicWhenDelete(Integer operatorId, Task task);

    List<TaskVo> undoTaskList();
}
